# application/extensions/init_databases.py (最终版本)
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask.cli import with_appcontext
import click
import os

# 创建数据库实例
db = SQLAlchemy()
migrate = Migrate()


def init_databases(app: Flask):
    """初始化数据库"""
    # 导入所有模型
    from application.models import Withstand

    # 初始化数据库
    db.init_app(app)

    # 初始化迁移工具
    migrate.init_app(app, db)

    # 如果使用SQLite，确保数据库目录存在
    database_uri = app.config.get("SQLALCHEMY_DATABASE_URI")
    if database_uri and database_uri.startswith("sqlite:///"):
        database_path = database_uri.replace("sqlite:///", "")
        database_dir = os.path.dirname(database_path)
        if database_dir and not os.path.exists(database_dir):
            os.makedirs(database_dir)

    # 在应用启动时自动初始化数据库
    with app.app_context():
        auto_init_database()

    return db


def auto_init_database():
    """自动初始化数据库"""
    try:
        # 导入所有模型（确保路径正确）
        from application.models.system.withstand import Withstand
        
        print("正在初始化数据库...")
        print(f"导入的模型: {Withstand}")
        print(f"表名: {Withstand.__tablename__}")
        print(f"Base类: {Withstand.__bases__}")
        
        # 强制metadata包含所有表
        print(f"Metadata中的表: {Withstand.metadata.tables.keys()}")
        
        # 创建所有表
        Withstand.metadata.create_all(db.engine)
        print("数据库初始化完成")
    except Exception as e:
        print(f"数据库初始化失败: {e}")
        import traceback
        traceback.print_exc()
